package com.luych.toolbox.docker.service.sdk.container.model;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;
import java.util.Map;

public class DockerContainerCreateParam {

    @JsonProperty("StopSignal")
    private String stopSignal;

    @JsonProperty("User")
    private String user;

    @JsonProperty("Entrypoint")
    private String entrypoint;

    @JsonProperty("NetworkingConfig")
    private NetworkingConfig networkingConfig;

    @JsonProperty("AttachStderr")
    private Boolean attachStderr;

    @JsonProperty("Hostname")
    private String hostname;

    @JsonProperty("OpenStdin")
    private Boolean openStdin;

    @JsonProperty("Labels")
    private Map<String, String> labels;

    @JsonProperty("Env")
    private List<String> env;

    @JsonProperty("Image")
    private String image;

    @JsonProperty("NetworkDisabled")
    private Boolean networkDisabled;

    @JsonProperty("MacAddress")
    private String macAddress;

    @JsonProperty("ExposedPorts")
    private Map<String, String> exposedPorts;

    @JsonProperty("StdinOnce")
    private Boolean stdinOnce;

    @JsonProperty("AttachStdout")
    private Boolean attachStdout;

    @JsonProperty("WorkingDir")
    private String workingDir;

    @JsonProperty("Volumes")
    private Map<String, String> volumes;

    @JsonProperty("Domainname")
    private String domainname;

    @JsonProperty("AttachStdin")
    private Boolean attachStdin;

    @JsonProperty("Tty")
    private Boolean tty;

    @JsonProperty("HostConfig")
    private HostConfig hostConfig;

    @JsonProperty("Cmd")
    private List<String> cmd;

    @JsonProperty("StopTimeout")
    private Long stopTimeout;

    public String getStopSignal() {
        return stopSignal;
    }

    public void setStopSignal(String stopSignal) {
        this.stopSignal = stopSignal;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getEntrypoint() {
        return entrypoint;
    }

    public void setEntrypoint(String entrypoint) {
        this.entrypoint = entrypoint;
    }

    public NetworkingConfig getNetworkingConfig() {
        return networkingConfig;
    }

    public void setNetworkingConfig(NetworkingConfig networkingConfig) {
        this.networkingConfig = networkingConfig;
    }

    public Boolean getAttachStderr() {
        return attachStderr;
    }

    public void setAttachStderr(Boolean attachStderr) {
        this.attachStderr = attachStderr;
    }

    public String getHostname() {
        return hostname;
    }

    public void setHostname(String hostname) {
        this.hostname = hostname;
    }

    public Boolean getOpenStdin() {
        return openStdin;
    }

    public void setOpenStdin(Boolean openStdin) {
        this.openStdin = openStdin;
    }

    public Map<String, String> getLabels() {
        return labels;
    }

    public void setLabels(Map<String, String> labels) {
        this.labels = labels;
    }

    public List<String> getEnv() {
        return env;
    }

    public void setEnv(List<String> env) {
        this.env = env;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public Boolean getNetworkDisabled() {
        return networkDisabled;
    }

    public void setNetworkDisabled(Boolean networkDisabled) {
        this.networkDisabled = networkDisabled;
    }

    public String getMacAddress() {
        return macAddress;
    }

    public void setMacAddress(String macAddress) {
        this.macAddress = macAddress;
    }

    public Map<String, String> getExposedPorts() {
        return exposedPorts;
    }

    public void setExposedPorts(Map<String, String> exposedPorts) {
        this.exposedPorts = exposedPorts;
    }

    public Boolean getStdinOnce() {
        return stdinOnce;
    }

    public void setStdinOnce(Boolean stdinOnce) {
        this.stdinOnce = stdinOnce;
    }

    public Boolean getAttachStdout() {
        return attachStdout;
    }

    public void setAttachStdout(Boolean attachStdout) {
        this.attachStdout = attachStdout;
    }

    public String getWorkingDir() {
        return workingDir;
    }

    public void setWorkingDir(String workingDir) {
        this.workingDir = workingDir;
    }

    public Map<String, String> getVolumes() {
        return volumes;
    }

    public void setVolumes(Map<String, String> volumes) {
        this.volumes = volumes;
    }

    public String getDomainname() {
        return domainname;
    }

    public void setDomainname(String domainname) {
        this.domainname = domainname;
    }

    public Boolean getAttachStdin() {
        return attachStdin;
    }

    public void setAttachStdin(Boolean attachStdin) {
        this.attachStdin = attachStdin;
    }

    public Boolean getTty() {
        return tty;
    }

    public void setTty(Boolean tty) {
        this.tty = tty;
    }

    public HostConfig getHostConfig() {
        return hostConfig;
    }

    public void setHostConfig(HostConfig hostConfig) {
        this.hostConfig = hostConfig;
    }

    public List<String> getCmd() {
        return cmd;
    }

    public void setCmd(List<String> cmd) {
        this.cmd = cmd;
    }

    public Long getStopTimeout() {
        return stopTimeout;
    }

    public void setStopTimeout(Long stopTimeout) {
        this.stopTimeout = stopTimeout;
    }

    public static class NetworkingConfig {

        @JsonProperty("EndpointsConfig")
        private Map<String, EndpointsConfig> endpointsConfig;

        public Map<String, EndpointsConfig> getEndpointsConfig() {
            return endpointsConfig;
        }

        public void setEndpointsConfig(Map<String, EndpointsConfig> endpointsConfig) {
            this.endpointsConfig = endpointsConfig;
        }

        public static class EndpointsConfig {

            @JsonProperty("IPAMConfig")
            private IPAMConfig iPAMConfig;

            @JsonProperty("Links")
            private List<String> links;

            @JsonProperty("Aliases")
            private List<String> aliases;

            public IPAMConfig getiPAMConfig() {
                return iPAMConfig;
            }

            public void setiPAMConfig(IPAMConfig iPAMConfig) {
                this.iPAMConfig = iPAMConfig;
            }

            public List<String> getLinks() {
                return links;
            }

            public void setLinks(List<String> links) {
                this.links = links;
            }

            public List<String> getAliases() {
                return aliases;
            }

            public void setAliases(List<String> aliases) {
                this.aliases = aliases;
            }

            public static class IPAMConfig {

                @JsonProperty("LinkLocalIPs")
                private List<String> linkLocalIPs;

                @JsonProperty("IPv6Address")
                private String iPv6Address;

                @JsonProperty("IPv4Address")
                private String iPv4Address;

                public List<String> getLinkLocalIPs() {
                    return linkLocalIPs;
                }

                public void setLinkLocalIPs(List<String> linkLocalIPs) {
                    this.linkLocalIPs = linkLocalIPs;
                }

                public String getiPv6Address() {
                    return iPv6Address;
                }

                public void setiPv6Address(String iPv6Address) {
                    this.iPv6Address = iPv6Address;
                }

                public String getiPv4Address() {
                    return iPv4Address;
                }

                public void setiPv4Address(String iPv4Address) {
                    this.iPv4Address = iPv4Address;
                }
            }
        }
    }

    public static class HostConfig {

        @JsonProperty("ReadonlyRootfs")
        private Boolean readonlyRootfs;

        @JsonProperty("StorageOpt")
        private StorageOpt storageOpt;

        @JsonProperty("BlkioWeightDevice")
        private List<BlkioWeightDevice> blkioWeightDevice;

        @JsonProperty("DnsOptions")
        private List<String> dnsOptions;

        @JsonProperty("Memory")
        private Long memory;

        @JsonProperty("CpuPeriod")
        private Long cpuPeriod;

        @JsonProperty("MaximumIOBps")
        private Long maximumIOBps;

        @JsonProperty("PortBindings")
        private Map<String, List<PortBinding>> portBindings;

        @JsonProperty("Dns")
        private List<String> dns;

        @JsonProperty("ExtraHosts")
        private List<String> extraHosts;

        @JsonProperty("VolumesFrom")
        private List<String> volumesFrom;

        @JsonProperty("MemorySwappiness")
        private Long memorySwappiness;

        @JsonProperty("Devices")
        private List<Object> devices;

        @JsonProperty("BlkioWeight")
        private Long blkioWeight;

        @JsonProperty("Ulimits")
        private List<Ulimit> ulimits;

        @JsonProperty("CpusetCpus")
        private String cpusetCpus;

        @JsonProperty("MemoryReservation")
        private Long memoryReservation;

        @JsonProperty("BlkioDeviceWriteIOps")
        private List<BlkioDeviceWriteIOp> blkioDeviceWriteIOps;

        @JsonProperty("CpuRealtimeRuntime")
        private Long cpuRealtimeRuntime;

        @JsonProperty("CpuQuota")
        private Long cpuQuota;

        @JsonProperty("DnsSearch")
        private List<String> dnsSearch;

        @JsonProperty("CpuShares")
        private Long cpuShares;

        @JsonProperty("OomScoreAdj")
        private Long oomScoreAdj;

        @JsonProperty("KernelMemory")
        private Long kernelMemory;

        @JsonProperty("LogConfig")
        private LogConfig logConfig;

        @JsonProperty("DeviceRequests")
        private List<DeviceRequest> deviceRequests;

        @JsonProperty("OomKillDisable")
        private Boolean oomKillDisable;

        @JsonProperty("Privileged")
        private Boolean privileged;

        @JsonProperty("GroupAdd")
        private List<String> groupAdd;

        @JsonProperty("AutoRemove")
        private Boolean autoRemove;

        @JsonProperty("CpuPercent")
        private Long cpuPercent;

        @JsonProperty("CapAdd")
        private List<String> capAdd;

        @JsonProperty("VolumeDriver")
        private String volumeDriver;

        @JsonProperty("CapDrop")
        private List<String> capDrop;

        @JsonProperty("PublishAllPorts")
        private Boolean publishAllPorts;

        @JsonProperty("CpuRealtimePeriod")
        private Long cpuRealtimePeriod;

        @JsonProperty("Binds")
        private List<String> binds;

        @JsonProperty("CpusetMems")
        private String cpusetMems;

        @JsonProperty("BlkioDeviceWriteBps")
        private List<BlkioDeviceWriteBp> blkioDeviceWriteBps;

        @JsonProperty("RestartPolicy")
        private RestartPolicy restartPolicy;

        @JsonProperty("PidMode")
        private String pidMode;

        @JsonProperty("NetworkMode")
        private String networkMode;

        @JsonProperty("BlkioDeviceReadBps")
        private List<BlkioDeviceReadBp> blkioDeviceReadBps;

        @JsonProperty("CgroupParent")
        private String cgroupParent;

        @JsonProperty("MaximumIOps")
        private Long maximumIOps;

        @JsonProperty("NanoCpus")
        private Long nanoCpus;

        @JsonProperty("MemorySwap")
        private Long memorySwap;

        @JsonProperty("Links")
        private List<String> links;

        @JsonProperty("PidsLimit")
        private Long pidsLimit;

        @JsonProperty("BlkioDeviceReadIOps")
        private List<BlkioDeviceReadIOp> blkioDeviceReadIOps;

        @JsonProperty("SecurityOpt")
        private List<Object> securityOpt;

        @JsonProperty("ShmSize")
        private Long shmSize;

        public Boolean getReadonlyRootfs() {
            return readonlyRootfs;
        }

        public void setReadonlyRootfs(Boolean readonlyRootfs) {
            this.readonlyRootfs = readonlyRootfs;
        }

        public StorageOpt getStorageOpt() {
            return storageOpt;
        }

        public void setStorageOpt(StorageOpt storageOpt) {
            this.storageOpt = storageOpt;
        }

        public List<BlkioWeightDevice> getBlkioWeightDevice() {
            return blkioWeightDevice;
        }

        public void setBlkioWeightDevice(List<BlkioWeightDevice> blkioWeightDevice) {
            this.blkioWeightDevice = blkioWeightDevice;
        }

        public List<String> getDnsOptions() {
            return dnsOptions;
        }

        public void setDnsOptions(List<String> dnsOptions) {
            this.dnsOptions = dnsOptions;
        }

        public Long getMemory() {
            return memory;
        }

        public void setMemory(Long memory) {
            this.memory = memory;
        }

        public Long getCpuPeriod() {
            return cpuPeriod;
        }

        public void setCpuPeriod(Long cpuPeriod) {
            this.cpuPeriod = cpuPeriod;
        }

        public Long getMaximumIOBps() {
            return maximumIOBps;
        }

        public void setMaximumIOBps(Long maximumIOBps) {
            this.maximumIOBps = maximumIOBps;
        }

        public Map<String, List<PortBinding>> getPortBindings() {
            return portBindings;
        }

        public void setPortBindings(Map<String, List<PortBinding>> portBindings) {
            this.portBindings = portBindings;
        }

        public List<String> getDns() {
            return dns;
        }

        public void setDns(List<String> dns) {
            this.dns = dns;
        }

        public List<String> getExtraHosts() {
            return extraHosts;
        }

        public void setExtraHosts(List<String> extraHosts) {
            this.extraHosts = extraHosts;
        }

        public List<String> getVolumesFrom() {
            return volumesFrom;
        }

        public void setVolumesFrom(List<String> volumesFrom) {
            this.volumesFrom = volumesFrom;
        }

        public Long getMemorySwappiness() {
            return memorySwappiness;
        }

        public void setMemorySwappiness(Long memorySwappiness) {
            this.memorySwappiness = memorySwappiness;
        }

        public List<Object> getDevices() {
            return devices;
        }

        public void setDevices(List<Object> devices) {
            this.devices = devices;
        }

        public Long getBlkioWeight() {
            return blkioWeight;
        }

        public void setBlkioWeight(Long blkioWeight) {
            this.blkioWeight = blkioWeight;
        }

        public List<Ulimit> getUlimits() {
            return ulimits;
        }

        public void setUlimits(List<Ulimit> ulimits) {
            this.ulimits = ulimits;
        }

        public String getCpusetCpus() {
            return cpusetCpus;
        }

        public void setCpusetCpus(String cpusetCpus) {
            this.cpusetCpus = cpusetCpus;
        }

        public Long getMemoryReservation() {
            return memoryReservation;
        }

        public void setMemoryReservation(Long memoryReservation) {
            this.memoryReservation = memoryReservation;
        }

        public List<BlkioDeviceWriteIOp> getBlkioDeviceWriteIOps() {
            return blkioDeviceWriteIOps;
        }

        public void setBlkioDeviceWriteIOps(List<BlkioDeviceWriteIOp> blkioDeviceWriteIOps) {
            this.blkioDeviceWriteIOps = blkioDeviceWriteIOps;
        }

        public Long getCpuRealtimeRuntime() {
            return cpuRealtimeRuntime;
        }

        public void setCpuRealtimeRuntime(Long cpuRealtimeRuntime) {
            this.cpuRealtimeRuntime = cpuRealtimeRuntime;
        }

        public Long getCpuQuota() {
            return cpuQuota;
        }

        public void setCpuQuota(Long cpuQuota) {
            this.cpuQuota = cpuQuota;
        }

        public List<String> getDnsSearch() {
            return dnsSearch;
        }

        public void setDnsSearch(List<String> dnsSearch) {
            this.dnsSearch = dnsSearch;
        }

        public Long getCpuShares() {
            return cpuShares;
        }

        public void setCpuShares(Long cpuShares) {
            this.cpuShares = cpuShares;
        }

        public Long getOomScoreAdj() {
            return oomScoreAdj;
        }

        public void setOomScoreAdj(Long oomScoreAdj) {
            this.oomScoreAdj = oomScoreAdj;
        }

        public Long getKernelMemory() {
            return kernelMemory;
        }

        public void setKernelMemory(Long kernelMemory) {
            this.kernelMemory = kernelMemory;
        }

        public LogConfig getLogConfig() {
            return logConfig;
        }

        public void setLogConfig(LogConfig logConfig) {
            this.logConfig = logConfig;
        }

        public List<DeviceRequest> getDeviceRequests() {
            return deviceRequests;
        }

        public void setDeviceRequests(List<DeviceRequest> deviceRequests) {
            this.deviceRequests = deviceRequests;
        }

        public Boolean getOomKillDisable() {
            return oomKillDisable;
        }

        public void setOomKillDisable(Boolean oomKillDisable) {
            this.oomKillDisable = oomKillDisable;
        }

        public Boolean getPrivileged() {
            return privileged;
        }

        public void setPrivileged(Boolean privileged) {
            this.privileged = privileged;
        }

        public List<String> getGroupAdd() {
            return groupAdd;
        }

        public void setGroupAdd(List<String> groupAdd) {
            this.groupAdd = groupAdd;
        }

        public Boolean getAutoRemove() {
            return autoRemove;
        }

        public void setAutoRemove(Boolean autoRemove) {
            this.autoRemove = autoRemove;
        }

        public Long getCpuPercent() {
            return cpuPercent;
        }

        public void setCpuPercent(Long cpuPercent) {
            this.cpuPercent = cpuPercent;
        }

        public List<String> getCapAdd() {
            return capAdd;
        }

        public void setCapAdd(List<String> capAdd) {
            this.capAdd = capAdd;
        }

        public String getVolumeDriver() {
            return volumeDriver;
        }

        public void setVolumeDriver(String volumeDriver) {
            this.volumeDriver = volumeDriver;
        }

        public List<String> getCapDrop() {
            return capDrop;
        }

        public void setCapDrop(List<String> capDrop) {
            this.capDrop = capDrop;
        }

        public Boolean getPublishAllPorts() {
            return publishAllPorts;
        }

        public void setPublishAllPorts(Boolean publishAllPorts) {
            this.publishAllPorts = publishAllPorts;
        }

        public Long getCpuRealtimePeriod() {
            return cpuRealtimePeriod;
        }

        public void setCpuRealtimePeriod(Long cpuRealtimePeriod) {
            this.cpuRealtimePeriod = cpuRealtimePeriod;
        }

        public List<String> getBinds() {
            return binds;
        }

        public void setBinds(List<String> binds) {
            this.binds = binds;
        }

        public String getCpusetMems() {
            return cpusetMems;
        }

        public void setCpusetMems(String cpusetMems) {
            this.cpusetMems = cpusetMems;
        }

        public List<BlkioDeviceWriteBp> getBlkioDeviceWriteBps() {
            return blkioDeviceWriteBps;
        }

        public void setBlkioDeviceWriteBps(List<BlkioDeviceWriteBp> blkioDeviceWriteBps) {
            this.blkioDeviceWriteBps = blkioDeviceWriteBps;
        }

        public RestartPolicy getRestartPolicy() {
            return restartPolicy;
        }

        public void setRestartPolicy(RestartPolicy restartPolicy) {
            this.restartPolicy = restartPolicy;
        }

        public String getPidMode() {
            return pidMode;
        }

        public void setPidMode(String pidMode) {
            this.pidMode = pidMode;
        }

        public String getNetworkMode() {
            return networkMode;
        }

        public void setNetworkMode(String networkMode) {
            this.networkMode = networkMode;
        }

        public List<BlkioDeviceReadBp> getBlkioDeviceReadBps() {
            return blkioDeviceReadBps;
        }

        public void setBlkioDeviceReadBps(List<BlkioDeviceReadBp> blkioDeviceReadBps) {
            this.blkioDeviceReadBps = blkioDeviceReadBps;
        }

        public String getCgroupParent() {
            return cgroupParent;
        }

        public void setCgroupParent(String cgroupParent) {
            this.cgroupParent = cgroupParent;
        }

        public Long getMaximumIOps() {
            return maximumIOps;
        }

        public void setMaximumIOps(Long maximumIOps) {
            this.maximumIOps = maximumIOps;
        }

        public Long getNanoCpus() {
            return nanoCpus;
        }

        public void setNanoCpus(Long nanoCpus) {
            this.nanoCpus = nanoCpus;
        }

        public Long getMemorySwap() {
            return memorySwap;
        }

        public void setMemorySwap(Long memorySwap) {
            this.memorySwap = memorySwap;
        }

        public List<String> getLinks() {
            return links;
        }

        public void setLinks(List<String> links) {
            this.links = links;
        }

        public Long getPidsLimit() {
            return pidsLimit;
        }

        public void setPidsLimit(Long pidsLimit) {
            this.pidsLimit = pidsLimit;
        }

        public List<BlkioDeviceReadIOp> getBlkioDeviceReadIOps() {
            return blkioDeviceReadIOps;
        }

        public void setBlkioDeviceReadIOps(List<BlkioDeviceReadIOp> blkioDeviceReadIOps) {
            this.blkioDeviceReadIOps = blkioDeviceReadIOps;
        }

        public List<Object> getSecurityOpt() {
            return securityOpt;
        }

        public void setSecurityOpt(List<Object> securityOpt) {
            this.securityOpt = securityOpt;
        }

        public Long getShmSize() {
            return shmSize;
        }

        public void setShmSize(Long shmSize) {
            this.shmSize = shmSize;
        }

        public static class StorageOpt {

        }

        public static class BlkioWeightDevice {

        }

        public static class BlkioDeviceWriteIOp {

        }

        public static class DeviceRequest {

            @JsonProperty("Options")
            private Map<String, String> options;

            @JsonProperty("Capabilities")
            private String[][] capabilities;

            @JsonProperty("Driver")
            private String driver;

            @JsonProperty("Count")
            private Long count;

            @JsonProperty("DeviceIDs")
            private List<String> deviceIDs;

            public Map<String, String> getOptions() {
                return options;
            }

            public void setOptions(Map<String, String> options) {
                this.options = options;
            }

            public String[][] getCapabilities() {
                return capabilities;
            }

            public void setCapabilities(String[][] capabilities) {
                this.capabilities = capabilities;
            }

            public String getDriver() {
                return driver;
            }

            public void setDriver(String driver) {
                this.driver = driver;
            }

            public Long getCount() {
                return count;
            }

            public void setCount(Long count) {
                this.count = count;
            }

            public List<String> getDeviceIDs() {
                return deviceIDs;
            }

            public void setDeviceIDs(List<String> deviceIDs) {
                this.deviceIDs = deviceIDs;
            }
        }

        public static class BlkioDeviceWriteBp {

        }

        public static class BlkioDeviceReadIOp {

        }

        public static class BlkioDeviceReadBp {

        }

        public static class LogConfig {

            @JsonProperty("Type")
            private String type;

            @JsonProperty("Config")
            private Config config;

            public String getType() {
                return type;
            }

            public void setType(String type) {
                this.type = type;
            }

            public Config getConfig() {
                return config;
            }

            public void setConfig(Config config) {
                this.config = config;
            }

            public static class Config {

            }
        }

        public static class PortBinding {

            @JsonProperty("HostIp")
            private String hostIp;

            @JsonProperty("HostPort")
            private String hostPort;

            public String getHostIp() {
                return hostIp;
            }

            public void setHostIp(String hostIp) {
                this.hostIp = hostIp;
            }

            public String getHostPort() {
                return hostPort;
            }

            public void setHostPort(String hostPort) {
                this.hostPort = hostPort;
            }
        }

        public static class RestartPolicy {

            @JsonProperty("MaximumRetryCount")
            private Long maximumRetryCount;

            @JsonProperty("Name")
            private String name;

            public Long getMaximumRetryCount() {
                return maximumRetryCount;
            }

            public void setMaximumRetryCount(Long maximumRetryCount) {
                this.maximumRetryCount = maximumRetryCount;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }
        }

        public static class Ulimit {

        }
    }
}